package com.cskaoyan.javase.oop2._1extends._10final._3variable._3static;

/**
 * final修饰静态成员变量,就是静态成员常量.
 * 由于静态变量在整个类的全局只有一份,所以final修饰的静态变量也称之为"全局常量"
 * 在整个类的全局独一份且不变,是真正的常量,用途最多.
 *
 * 语法:
 * [访问权限修饰符] static final 数据类型 常量名;
 *
 * 和成员常量一样,全局常量的值不能依赖于默认值,需要手动赋值,赋值方式(在类加载过程中)有:
 *      1.显式赋值
 *      2.静态代码块
 * 上述两种方式二选一,也必须只能选择其一.
 *
 * 注意事项:
 *      1.全局常量是真正意义上的常量,用途很多.
 *          在开发中,如果一个变量在类的全局独一份,而且没有必要被修改,那么就可以声明为全局常量.
 *      2.写法上 static final 或者 final static都是可以的
 *      3.访问类的静态成员变量,会触发该类加载.
 *          但是访问类的全局常量,在某些场景不会触发类加载,静态代码块不会执行.
 *              ---> 指的是访问使用字面值常量赋值的全局常量
 *
 * @since 09:57
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // System.out.println(A.NUM);
        System.out.println(A.STR);
    }
}

class A {
    static final String NUM = "123";
    static final String STR = new String("123");

    static {
        System.out.println("A类加载了!");
    }
}